/*eslint-disable*/
/***
 * 数字转中文金额大写
 * @param num 需要转换的数字
 * @return 中文大写金额
 * @type string
 */
export const number2Money = (num, unit) => {
  //0的情况，和空串不一样
  if (num === 0)
    return unit ? unit + '整' : '零元整'
  //格式不对
  if (!/^-?([1-9]\d*|0)(\.\d+)?$/.test(num) || !num)
    return ''
  let re = '' //结果
  num = '' + num//转字符串
    let negative = false
  if (num.charAt(0) === '-') { // 负数
    num = num.substr(1)
    negative = true
  }
    const AA = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
    const BB = ['', '拾', '佰', '仟', '万', '亿', '元', '']
    const CC = ['角', '分']
  //小数点前后分段
  let a = num.split('.')
  //小数点后做特殊处理
  if (a[1]) {
    //角分都是0，则舍去
    if (a[1].match(/^0{2}/) || a[1].match(/^0$/))
      a.pop()
    //角不为0，分为0，则分位舍去
    else if (a[1].match(/^[1-9]0/))
      a[1] = a[1][0]
  }
  //小数点前从右到左的计数
    let k = 0
  //转换结果
  //小数点前的情况
  if (a[0] > 0)
    for (let i = a[0].length - 1; i >= 0; i--) {
      switch (k) {
        //最右一位
        case 0 :
          re = BB[7] + re
          break
        //从右到左第5位且前面不是4位均是0，则加一个'萬'字
        case 4 :
          if (!new RegExp('0{4}\\d{' + (a[0].length - i - 1) + '}$').test(a[0]))
            re = BB[4] + re
          break
        //到第9位后，加一个'億'字，并且重新开始计数k,并且重新赋值BB[7]为‘億’
        case 8 :
          re = BB[5] + re
          BB[7] = BB[5]
          k = 0
          break
      }
      //加'零'的情况
      if (k % 4 !== 0 && a[0].charAt(i) === '0' && a[0].charAt(i + 1) !== '' && a[0].charAt(i + 1) !== '0')
        re = AA[0] + re
      // if(k%4 == 2 && a[0].charAt(i)=='0' && a[0].charAt(i+2) != '0')
      // 	re = AA[0] + re
      //选择该位上的数字对应的中文大写,再加上拾、佰、仟
      if (a[0].charAt(i) !== 0)
        re = AA[a[0].charAt(i)] + BB[k % 4] + re
      //计数加1
      k++
    }
  //小数点后的情况
  if (a.length > 1) {
    if (a[0] > 0)  // 有小数并且小数点前不为0，加元字, '0'居然是true你敢信?
      re += BB[6]
    for (let i = 0; i < a[1].length && i <= 1; i++) {
      //针对角为0的情况
      if (a[1].charAt(i) === '0') {
        if (a[0] > 0)
          re += AA[0]
      }
      else
        re += AA[a[1].charAt(i)] + CC[i]
    }
    /*if(a[1].charAt(0)=='0' && a[1].charAt(1)=='0'){
     re+='元整'
     }   */
  }
  //没有小数点的情况,或者都是小数点后都是0
  else {
    re += unit ? unit + '整' : '元整'
  }
  if (negative)
    re = '负' + re
  return re
}
// 数字转成带千分位的金额字符串
export const number2Money2 = num => {
  // 处理数字情况
  if (typeof(num) === 'number') {
    num = num.toString()
  } else if (typeof(num) === 'string') {
    num = num.trim()
  } else {
    return 0
  }
  if (!num) {
    return ''
  }

  let dpos = num.indexOf('.')
  let s1, s2
  let p = /(\d+)(\d{3})/
  if (dpos >= 0) {
    s1 = num.substring(0, dpos) || '0'
    s2 = num.substring(dpos + 1, num.length)
    while (p.test(s1)) {
      s1 = s1.replace(p, '$1' + ',' + '$2')
    }
    num = s1 + '.' + s2
  } else {
    while (p.test(num)) {
      num = num.replace(p, '$1' + ',' + '$2')
    }
  }
  return num
}
